home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / sun / awt / ScreenUpdater.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  2.6 KB  |  116 lines

  1. package sun.awt;
  2.  
  3. public class ScreenUpdater extends Thread {
  4.    private final int PRIORITY = 4;
  5.    private ScreenUpdaterEntry first;
  6.    public static final ScreenUpdater updater = newScreenUpdater();
  7.  
  8.    static ThreadGroup findSystemThreadGroup() {
  9.       Thread var0 = Thread.currentThread();
  10.  
  11.       ThreadGroup var1;
  12.       for(var1 = var0.getThreadGroup(); var1 != null && !var1.getName().equals("main"); var1 = var1.getParent()) {
  13.       }
  14.  
  15.       return var1;
  16.    }
  17.  
  18.    static ScreenUpdater newScreenUpdater() {
  19.       SecurityManager.enablePrivilege("UniversalThreadAccess");
  20.       SecurityManager.enablePrivilege("UniversalThreadGroupAccess");
  21.       return new ScreenUpdater(findSystemThreadGroup(), "ScreenUpdater");
  22.    }
  23.  
  24.    private ScreenUpdater(ThreadGroup var1, String var2) {
  25.       super(var1, var2);
  26.       ((Thread)this).start();
  27.    }
  28.  
  29.    private ScreenUpdater() {
  30.       ((Thread)this).start();
  31.    }
  32.  
  33.    private synchronized ScreenUpdaterEntry nextEntry() throws InterruptedException {
  34.       while(true) {
  35.          if (this.first == null) {
  36.             Object var5 = null;
  37.             this.wait();
  38.          } else {
  39.             long var2 = this.first.when - System.currentTimeMillis();
  40.             if (var2 <= 0L) {
  41.                ScreenUpdaterEntry var4 = this.first;
  42.                this.first = this.first.next;
  43.                return var4;
  44.             }
  45.  
  46.             Object var1 = null;
  47.             this.wait(var2);
  48.          }
  49.       }
  50.    }
  51.  
  52.    public void run() {
  53.       SecurityManager.enablePrivilege("UniversalThreadAccess");
  54.       ((Thread)this).setName("ScreenUpdater");
  55.  
  56.       try {
  57.          while(true) {
  58.             ((Thread)this).setPriority(4);
  59.             ScreenUpdaterEntry var1 = this.nextEntry();
  60.             ((Thread)this).setPriority(var1.client.updatePriority());
  61.  
  62.             try {
  63.                var1.client.updateClient(var1.arg);
  64.             } catch (Throwable var3) {
  65.                var3.printStackTrace();
  66.             }
  67.  
  68.             Object var5 = null;
  69.          }
  70.       } catch (InterruptedException var4) {
  71.       }
  72.    }
  73.  
  74.    public void notify(UpdateClient var1) {
  75.       this.notify(var1, 100L, (Object)null);
  76.    }
  77.  
  78.    public synchronized void notify(UpdateClient var1, long var2) {
  79.       this.notify(var1, var2, (Object)null);
  80.    }
  81.  
  82.    public synchronized void notify(UpdateClient var1, long var2, Object var4) {
  83.       long var5 = System.currentTimeMillis() + var2;
  84.       long var7 = this.first != null ? this.first.when : -1L;
  85.       if (this.first != null) {
  86.          if (this.first.client == var1) {
  87.             var5 = Math.min(this.first.when, var5);
  88.             this.first = this.first.next;
  89.          } else {
  90.             for(ScreenUpdaterEntry var9 = this.first; var9.next != null; var9 = var9.next) {
  91.                if (var9.next.client == var1 && var9.next.arg == var4) {
  92.                   var5 = Math.min(var9.next.when, var5);
  93.                   var9.next = var9.next.next;
  94.                   break;
  95.                }
  96.             }
  97.          }
  98.       }
  99.  
  100.       if (this.first != null && this.first.when <= var5) {
  101.          ScreenUpdaterEntry var10;
  102.          for(var10 = this.first; var10.next != null && var10.next.when <= var5; var10 = var10.next) {
  103.          }
  104.  
  105.          var10.next = new ScreenUpdaterEntry(var1, var5, var4, var10.next);
  106.       } else {
  107.          this.first = new ScreenUpdaterEntry(var1, var5, var4, this.first);
  108.       }
  109.  
  110.       if (var7 != this.first.when) {
  111.          super.notify();
  112.       }
  113.  
  114.    }
  115. }
  116.